package leetcode.editor.cn.dsa09_doublequeue;
//给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
//
// 示例：
// 输入："Let's take LeetCode contest"
// 输出："s'teL ekat edoCteeL tsetnoc"
//
// 提示：
// 在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
//
// Related Topics 字符串

public class ReverseWordsInAStringIii557 {
    public static void main(String[] args) {
        Solution solution = new ReverseWordsInAStringIii557().new Solution();
        solution.reverseWords("Let's take LeetCode contest");
        // s'teL ekat edoCteeL tsetnoc
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public String reverseWords(String s) {
            // 定义单词开始索引，结束索引
            int start = 0, end = 0;
            char[] chars = s.toCharArray();
            // 遍历每一个字符
            for (int i = 0; i < chars.length; i++) {
                char c = chars[i];
                // 字符为空格时，反转空格前面的单词
                if (c == ' ' || i == chars.length - 1) {
                    if (i == chars.length - 1) i++;
                    end = i - 1; // 定位结束索引，为空格前一个位置
                    while (start <= end) { // 原地交换数组值
                        char temp = chars[start];
                        chars[start++] = chars[end];
                        chars[end--] = temp;
                    }
                    // 每反转完一个单词，重置开始索引
                    start = i + 1;
                }
            }
            return new String(chars);
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
}